// Functor函子
// 总结：
// 1. 函数式编程的运算不直接操作值，而是由函子完成
// 2. 函子就是一个实现了map契约的对象
// 3. 把函子想象成一个盒子，这个盒子里封装了一个值
// 4. 想要处理盒子中的值，需要给盒子的map方法传递一个处理值的函数(纯函数)，由这个函数来对值进行处理
// 5. 最终map方法返回一个包含新值的函子

class Container {
    static of(value) {
        return new Container(value)
    }
    constructor(value) {
        this._value = value
    }
    map(fn) {
        return new Container(fn(this._value))
    }
}
// String.prototype.toUpperCase
// 演示null, undefind
const r = Container.of(null)
    .map((x) => x.toUpperCase())

console.log(r);



